package dao

import (
	"time"
)

// 这是 Mission 的全局公开dao对象，被service层调用!
var MissionDao = missionDao{}

// 任务表
// 这是 mission表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type Mission struct {
	Id        int32     `json:"id" form:"id" db:"id" v:"id"`
	Name      string    `json:"name" form:"name" db:"name" v:"name"`         // 任务名，如每日登录奖励
	Type      int8      `json:"type" form:"type" db:"type" v:"type"`         // 类型 1-每日登录奖励，2-初始资本，3-分享获得
	Fixed     int32     `json:"fixed" form:"fixed" db:"fixed" v:"fixed"`     // 固定奖励多少铜币
	Min       int32     `json:"min" form:"min" db:"min" v:"min"`             // 奖励最少铜币，连续型任务
	Max       int32     `json:"max" form:"max" db:"max" v:"max"`             // 奖励最多铜币，连续型任务
	Incr      int32     `json:"incr" form:"incr" db:"incr" v:"incr"`         // 连续登录增量，连续型任务
	Status    int8      `json:"status" form:"status" db:"status" v:"status"` // 状态: 0-正常，未完成；1-已过期；2-已下线
	CreatedAt time.Time `json:"created_at" form:"created_at" db:"created_at" v:"created_at"`
}

// 注意:这是 Mission 的私有dao对象，只能在dao层内使用!
type missionDao struct {
	InsertTemplate func(arg Mission) (int64, error)         //插入一条记录
	UpdateTemplate func(arg Mission) (int64, error)         //更新一条记录
	DeleteTemplate func(id int64) (int64, error)            `arg:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (Mission, error)          `arg:"id"` //根据传入的主键获取一条记录
	List           func(arg MissionList) ([]Mission, error) //模糊分页查询
}

/*
// 这是 mission 表的Postman测试参数
// 该结构体中的字段就是: 前后端交互的json字段!
type MissionPostman struct {
id
name
type
fixed
min
max
incr
status
created_at

}*/

// 这是 mission 表的批量请求参数
type MissionReq struct {
	List []Mission `json:"list" form:"list"`
}

// 这是 missionDao.List()方法的请求参数
type MissionList struct {
	Page
}
